嗨大家好,我是Sean!
今天接續著昨天,我們來繼續討論關於DRF的細節及用法!
我們昨天已經提過了api,但忘記先說明api是甚麼(尷尬),RESTful api又是甚麼呢?
讓我們來補救一下昨天漏講的部分。
API (Application Programming Interface),中文翻譯是應用程式介面,
直觀來說,就是應用程式與應用程式之間的溝通橋樑,是不是還是覺得有點抽象?
之前有看過一個關於API的影片簡介,覺得很生動貼切,我把他的連結放在下面,歡迎大家看看!
那麼,簡單來說,就像影片中所介紹的,如果是一間餐廳是一個網頁程式的話,流程會是這樣的:
首先,進到了餐廳我們第一個看的是,他的菜單!
當我們選好要點甚麼了,我們請服務生來點餐:
第二步,點餐的服務生便會記下我們的點餐內容,並將他轉交給餐廳的內場廚房。
第三步,則是交由廚房製作料理,並且在料理製作完成後,服務生再將料理送餐到我們的餐桌。
這樣的過程,其實與使用API在前後端傳遞資訊的過程大同小異。
這樣一來,有沒有對API有點概念了呢?
REST,其實代表的是Representational State Transfer (表現層狀態轉移)。更精準地來說,它是一種設計風格,而符合這種設計風格的形容詞,就是我們所說的RESTful了!
那麼,RESTful的設計風格又有甚麼特徵呢?
這樣的好處有甚麼呢?
最大的特點就是,就是靈活且獨立,可以藉由客戶端請求不同狀態method,來變更API的使用功能。
再來,就是RESTful API不用儲存狀態的緣故,消除了伺服器端的負載,可擴展性便大大提升了。
那麼,讓我們回到DRF本身,介紹一下DRF還有哪些強大方便的使用方法。
除了我們昨天使用過的generics.ListAPIView以外,簡單好用的APIView就還有其他的幾種:
這樣一來,使用上述幾種APIView配合method,就可以完成關於資料庫CRUD四大基本操作。
除此之外,還有複合式的使用方法,例如ListCreate、RetrieveUpdate等等的使用方法,甚至也可以自己克制化寫出Mixin的model。
但今天我們會再來講第二種關於DRF的使用方法。
上述使用APIView的方法看似簡單,但其中的限制就在於,原本設定時的參數都為單一model。雖然我們也可以依靠其他方法做客制化更改,但還是稍嫌麻煩,讓我們用另一種角度切入寫寫看。
相較於前面的APIView比較偏向於model based views,
我們這裡來介紹function based views給大家看,不同的寫法卻也可以殊途同歸。
回到專案,在我們寫的view之下增加function based view:
from rest_framework.decorators import api_view
from rest_framework.response import Response
from rest_framework import status
@api_view(['GET'])
def people_data(request):
if request.method == 'GET':
people = People.objects.all()
serializer = PeopleSerializer(people, many=True)
return Response(serializer.data)
同樣的,再將寫完的API註冊在我們的urls.py裡,值得注意的是,由於我們這裡寫的是function based view,所以步用在url的地方加上.as_view()
python manage.py runserver
開啟網頁,找到我們剛剛寫入的路徑後,便可以看到以下畫面:
如此一來就成功啦! 它可以達到的效果跟昨天的view大同小異,但好處在於它有更多的彈性,可以供我們自己客製化。
那麼今天的文章就先到此結束!
我是Sean,你各位海上的人,我們明天見!